﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using IUAP.DAL.Provider;
using IUAP.DAL.Intranet;
using System.Data.SqlClient;
using System.Data;
using System.Web.Security;
using System.Web.Profile;

/// <summary>
/// Descripción breve de SqlIntranetProvider
/// </summary>
namespace IUAP.DAL.SqlClient
{
    public class SqlIntranetProvider : IntranetProvider
    {
        #region "Métodos para Facultades"

        public override List<FacultadDetalles> GetFacultades(bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Facultad_getFacultad", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetFacultadCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override int InsertFacultad(FacultadDetalles facultad)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Facultad_inserFacultad", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nomb_facultad", SqlDbType.NVarChar).Value = facultad.Nomb_facultad;
                cmd.Parameters.Add("@dire_usua", SqlDbType.NVarChar).Value = facultad.Dire_usua;
                cmd.Parameters.Add("@esta_facultad", SqlDbType.Bit).Value = facultad.Esta_facultad;
                cmd.Parameters.Add("@id_facultad", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@id_facultad"].Value;
            }
        }

        public override bool UpdateFacultad(FacultadDetalles facultad)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Facultad_updateFacultad", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_facultad", SqlDbType.Int).Value = facultad.Id_facultad;
                cmd.Parameters.Add("@nomb_facultad", SqlDbType.NVarChar).Value = facultad.Nomb_facultad;
                cmd.Parameters.Add("@dire_usua", SqlDbType.NVarChar).Value = facultad.Dire_usua;
                cmd.Parameters.Add("@esta_facultad", SqlDbType.Bit).Value = facultad.Esta_facultad;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);

            }
        }

        public override List<FacultadDetalles> GetSimFacultades(bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Facultad_getSimFacultad", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetFacultadCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override int GetCountFacultad(bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Facultad_getCountFacultad", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return (int)ExecuteScalar(cmd);
            }
        }

        public override FacultadDetalles GetFacultadbyID(int id_facultad)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Facultad_getFacultadbyID", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_facultad", SqlDbType.Int).Value = id_facultad;
                cn.Open();
                IDataReader reader = ExecuteReader(cmd, CommandBehavior.SingleRow);
                if (reader.Read())
                    return GetFacultadFromReader(reader);
                else
                    return null;
            }
        }

        #endregion

        #region "Métodos para Escuelas"

        public override List<EscuelaDetalles> GetEscuelas(bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Escuela_getEscuela_List", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetEscuelaCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override List<EscuelaDetalles> GetEscuelas(int id_facultad, bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Escuela_getEscuela", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_facultad", SqlDbType.Int).Value = id_facultad;
                cmd.Parameters.Add("@esta_facultad", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetEscuelaCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override int InsertEscuela(EscuelaDetalles escuela)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Escuela_insertEscuela", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_facultad", SqlDbType.Int).Value = escuela.Id_facultad;
                cmd.Parameters.Add("@nomb_escuela", SqlDbType.NVarChar).Value = escuela.Nomb_escuela;
                cmd.Parameters.Add("@coor_usua", SqlDbType.NVarChar).Value = escuela.Coor_usua;
                cmd.Parameters.Add("@esta_escuela", SqlDbType.Bit).Value = escuela.Esta_escuela;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@id_escuela"].Value;
            }
        }

        public override bool UpdateEscuela(EscuelaDetalles escuela)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Escuela_updateEscuela", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = escuela.Id_escuela;
                cmd.Parameters.Add("@id_facultad", SqlDbType.Int).Value = escuela.Id_facultad;
                cmd.Parameters.Add("@nomb_escuela", SqlDbType.NVarChar).Value = escuela.Nomb_escuela;
                cmd.Parameters.Add("@coor_usua", SqlDbType.NVarChar).Value = escuela.Coor_usua;
                cmd.Parameters.Add("@esta_escuela", SqlDbType.Bit).Value = escuela.Esta_escuela;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override List<EscuelaDetalles> GetSimEscuelas(int id_facultad, bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Escuela_getSimEscuela", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_facultad", SqlDbType.Int).Value = id_facultad;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetEscuelaCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override int GetCountEscuela(bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Escuela_getCountEscuela", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@esta_escuela", SqlDbType.Bit).Value = estado;
                cn.Open();
                return (int)ExecuteScalar(cmd);
            }
        }

        public override List<EscuelaDetalles> GetSimEscuelabyDocente(string id_docente, bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Escuela_getSimEscuelabyDocente", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@doce_usua", SqlDbType.NVarChar).Value = id_docente;
                cmd.Parameters.Add("@esta_escuela", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetEscuelaCollectionFromReader(ExecuteReader(cmd));
            }
        }

        #endregion

        #region "Métodos para Cursos"

        public override List<CursoDetalles> GetCursosbyEscuela(int id_escuela, int pageIndex, int pageSize)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_getCursobyEscuela", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                cmd.Parameters.Add("@PageIndex", SqlDbType.Int).Value = pageIndex;
                cmd.Parameters.Add("@PageSize", SqlDbType.Int).Value = pageSize;
                cn.Open();
                return GetCursoCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override List<CursoDetalles> GetCursosbyEscuela(string parametro, int tipo_parametro, int id_escuela, int pageIndex, int pageSize)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd;
                switch (tipo_parametro)
                {
                    case 0:
                        cmd= new SqlCommand("tbi_Curso_getCursobyEscuela_Nombre", cn);
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add("@parametro", SqlDbType.NVarChar).Value = parametro;
                        cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                        cmd.Parameters.Add("@PageIndex", SqlDbType.Int).Value = pageIndex;
                        cmd.Parameters.Add("@PageSize", SqlDbType.Int).Value = pageSize;
                        cn.Open();
                        return GetCursoCollectionFromReader(ExecuteReader(cmd));
                    case 1:
                        cmd = new SqlCommand("tbi_Curso_getCursobyEscuela_Semestre", cn);
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add("@parametro", SqlDbType.Int).Value = int.Parse(parametro);
                        cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                        cmd.Parameters.Add("@PageIndex", SqlDbType.Int).Value = pageIndex;
                        cmd.Parameters.Add("@PageSize", SqlDbType.Int).Value = pageSize;
                        cn.Open();
                        return GetCursoCollectionFromReader(ExecuteReader(cmd));
                    default:
                        return null;
                }
            }
        }

        public override int GetCountCursos(int id_escuela)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_getCountCurso", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                cn.Open();
                return (int)ExecuteScalar(cmd);
            }
        }

        public override int InsertCurso(CursoDetalles curso)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_insertCurso", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = curso.Id_escuela;
                cmd.Parameters.Add("@nomb_curs", SqlDbType.NVarChar).Value = curso.Nomb_curs;
                cmd.Parameters.Add("@cred_curs", SqlDbType.Int).Value = curso.Cred_curs;
                cmd.Parameters.Add("@tipo_curs", SqlDbType.Bit).Value = curso.Tipo_curs;
                cmd.Parameters.Add("@seme_curs", SqlDbType.Int).Value = curso.Seme_curs;
                cmd.Parameters.Add("@actv_curs", SqlDbType.Bit).Value = curso.Actv_curs;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@id_curso"].Value;
            }
        }

        public override bool UpdateCurso(CursoDetalles curso)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_updateCurso", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = curso.Id_curso;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = curso.Id_escuela;
                cmd.Parameters.Add("@nomb_curs", SqlDbType.NVarChar).Value = curso.Nomb_curs;
                cmd.Parameters.Add("@cred_curs", SqlDbType.Int).Value = curso.Cred_curs;
                cmd.Parameters.Add("@tipo_curs", SqlDbType.Bit).Value = curso.Tipo_curs;
                cmd.Parameters.Add("@seme_curs", SqlDbType.Int).Value = curso.Seme_curs;
                cmd.Parameters.Add("@actv_curs", SqlDbType.Bit).Value = curso.Actv_curs;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override bool UpdateEstadoCurso(int id_curso, bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_updateEstadoCurso", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cmd.Parameters.Add("@actv_curs", SqlDbType.Bit).Value = estado;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        #endregion

        #region "Métodos para Periodos"

        public override int InsertPeriodo(PeriodoDetalles periodo)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Periodo_insertPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nomb_peri", SqlDbType.NVarChar).Value = periodo.Nomb_peri;
                cmd.Parameters.Add("@desc_peri", SqlDbType.NVarChar).Value = periodo.Desc_peri;
                cmd.Parameters.Add("@fech_inic_peri", SqlDbType.DateTime).Value = periodo.Fech_inic_peri;
                cmd.Parameters.Add("@fech_term_peri", SqlDbType.DateTime).Value = periodo.Fech_term_peri;
                cmd.Parameters.Add("@actv_peri", SqlDbType.Bit).Value = periodo.Actv_peri;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@id_periodo"].Value;
            }
        }

        public override bool UpdatePeriodo(PeriodoDetalles periodo)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Periodo_updatePeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = periodo.Id_periodo;
                cmd.Parameters.Add("@nomb_peri", SqlDbType.NVarChar).Value = periodo.Nomb_peri;
                cmd.Parameters.Add("@desc_peri", SqlDbType.NVarChar).Value = periodo.Desc_peri;
                cmd.Parameters.Add("@actv_peri", SqlDbType.Bit).Value = periodo.Actv_peri;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override bool UpdateEstadoPeriodo(int id_periodo, bool actv_peri)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Periodo_updateEstadoPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@actv_peri", SqlDbType.Bit).Value = actv_peri;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override List<PeriodoDetalles> GetPeriodos(bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Periodo_getPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetPeriodoCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override List<PeriodoDetalles> GetSimPeriodos(bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Periodo_getSimPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetPeriodoCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override List<PeriodoDetalles> GetSimPeriodos(bool estado, int id_escuela, string id_docente)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Periodo_getSimPeriodobyDocente", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                cmd.Parameters.Add("@doce_usua", SqlDbType.NVarChar).Value = id_docente;
                cn.Open();
                return GetPeriodoCollectionFromReader(ExecuteReader(cmd));
            }
        }

        #endregion

        #region "Métodos para Curso en Periodo"

        public override List<int> GetSemestres(int id_escuela, int id_periodo)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_getSemestres", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cn.Open();
                return GetCursoEnPeriodoSemCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override List<CursoEnPeriodoDetalles> GetCursoEnPeriodo(int id_escuela, int id_periodo, int pageIndex, int pageSize)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_getCursoEnPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@PageIndex", SqlDbType.Int).Value = pageIndex;
                cmd.Parameters.Add("@PageSize", SqlDbType.Int).Value = pageSize;
                cn.Open();
                return GetCursoEnPeriodoCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override List<CursoDetalles> GetCursobyDocente(string id_docente, int id_escuela, int id_periodo)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_getCursoEnPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_docente", SqlDbType.NVarChar).Value = id_docente;
                cmd.Parameters.Add("@id_escuela", SqlDbType.Int).Value = id_escuela;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cn.Open();
                return GetCursoCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override bool InsertFormula(int id_curso, int id_periodo, string formula)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_insertFormula", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value =  id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@form_curso", SqlDbType.NVarChar).Value = formula;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return ret == 1;
            }
        }

        public override int InsertCursoEnPeriodo(CursoEnPeriodoDetalles cursoenperiodo)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_insertCursoEnPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = cursoenperiodo.Id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = cursoenperiodo.Id_periodo;
                cmd.Parameters.Add("@doce_usua", SqlDbType.NVarChar).Value = cursoenperiodo.Doce_usua;
                cmd.Parameters.Add("@cierre_curso", SqlDbType.Bit).Value = cursoenperiodo.Cierre_curso;
                cmd.Parameters.Add("@actv_encu", SqlDbType.Bit).Value = cursoenperiodo.Actv_encu;
                cmd.Parameters.Add("@form_curso", SqlDbType.NVarChar).Value = cursoenperiodo.Form_curso;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return ret;
            }
        }

        public override bool UpdateCursoEnPeriodo(int id_curso,int id_periodo,string doce_usua)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_updateCursoEnPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@doce_usua", SqlDbType.NVarChar).Value = doce_usua;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override bool UpdateCierreCursoEnPeriodo(int id_periodo, int id_curso, bool cierre)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Periodo_updateCierreCursoEnPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@cierre_curso", SqlDbType.Bit).Value = cierre;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override bool UpdateEncuestaCursoEnPeriodo(int id_periodo, int id_curso, bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_updateEncuestaCursoEnPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@actv_encu", SqlDbType.Bit).Value = estado;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override bool DeleteCursoEnPeriodo(int id_curso, int id_periodo)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Curso_En_Periodo_deleteCursoEnPeriodo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        #endregion

        #region "Métodos para Horarios"

        public override int InsertHorario(IUAP.DAL.Intranet.HorarioDetalles horario)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Horario_insertHorario", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = horario.Id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = horario.Id_periodo;
                cmd.Parameters.Add("@dia_hora", SqlDbType.NVarChar).Value = horario.Dia_hora;
                cmd.Parameters.Add("@hoin_hora", SqlDbType.Time).Value = horario.Hoin_hora;
                cmd.Parameters.Add("@hofi_hora", SqlDbType.Time).Value = horario.Hofi_hora;
                cmd.Parameters.Add("@loca_hora", SqlDbType.NVarChar).Value = horario.Loca_hora;
                cmd.Parameters.Add("@aula_hora", SqlDbType.NVarChar).Value = horario.Aula_hora;
                cmd.Parameters.Add("@id_horario", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@id_horario"].Value;
            }
        }

        public override bool UpdateHorario(HorarioDetalles horario)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Horario_updateHorario", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_horario", SqlDbType.Int).Value = horario.Id_horario;
                cmd.Parameters.Add("@dia_hora", SqlDbType.NVarChar).Value = horario.Dia_hora;
                cmd.Parameters.Add("@hoin_hora", SqlDbType.Time).Value = horario.Hoin_hora;
                cmd.Parameters.Add("@hofi_hora", SqlDbType.Time).Value = horario.Hofi_hora;
                cmd.Parameters.Add("@loca_hora", SqlDbType.NVarChar).Value = horario.Loca_hora;
                cmd.Parameters.Add("@aula_hora", SqlDbType.NVarChar).Value = horario.Aula_hora; 
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        #endregion

        #region "Métodos para Mallas"

        public override List<MallaDetalles> GetCursosEnPeriodoActivo(string id_alumno)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Malla_getCursosEnPeriodoActivo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_alumno", SqlDbType.NVarChar).Value = id_alumno;
                cn.Open();
                return GetMallaCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override MallaDetalles GetCursoEnPeriodoActivo(string id_alumno, int id_periodo)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Malla_getCursoEnPeriodoActivo", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_alumno", SqlDbType.NVarChar).Value = id_alumno;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cn.Open();
                IDataReader reader = ExecuteReader(cmd, CommandBehavior.SingleRow);
                if (reader.Read())
                    return GetMallaFromReader(ExecuteReader(cmd));
                else
                    return null;
            }
        }

        public override List<PeriodoDetalles> GetPeriodosbyAlumno(string id_alumno, bool estado)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Malla_getPeriodobyAlumno", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_alumno", SqlDbType.NVarChar).Value = id_alumno;
                cmd.Parameters.Add("@estado", SqlDbType.Bit).Value = estado;
                cn.Open();
                return GetPeriodoCollectionFromReader(ExecuteReader(cmd));
            }
        }

        public override CursoDetalles GetDetalleCurso(int id_curso)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Malla_getDetalleCurso", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cn.Open();
                IDataReader reader = ExecuteReader(cmd, CommandBehavior.SingleRow);
                if (reader.Read())
                    return GetCursoFromReader(ExecuteReader(cmd));
                else
                    return null;
            }
        }

        #endregion

        #region "Métodos para Administradores"

        public override List<AdministradorDetalles> GetAdministradores()
        {
            string[] administradores;
            administradores= Roles.GetUsersInRole("Administrador");
            List<AdministradorDetalles> listadministradores = new List<AdministradorDetalles>();
            for (int i = 0; i < administradores.Length; i++)
            {
                ProfileCommon muprofile = (ProfileCommon)ProfileBase.Create(administradores[i], true);
                ProfileCommon targetProfile = muprofile.GetProfile(administradores[i]);
                string nombre = string.Format("{0} {1} {2}", targetProfile.Personal.nombres,
                    targetProfile.Personal.appaterno, targetProfile.Personal.apmaterno);
                listadministradores.Add(new AdministradorDetalles(administradores[i], nombre));
            }
            return listadministradores;
        }

        #endregion

        #region "Métodos para Docentes"

        public override DocenteDetalles GetDocentes(string id_docente)
        {
            MembershipUser docente = Membership.GetUser(id_docente);
            ProfileCommon muprofile = (ProfileCommon)ProfileBase.Create(id_docente, true);
            ProfileCommon targetProfile = muprofile.GetProfile(id_docente);
            string nombre = string.Format("{0} {1} {2}", targetProfile.Personal.nombres,
                    targetProfile.Personal.appaterno, targetProfile.Personal.apmaterno);
            return new DocenteDetalles(id_docente, nombre);
        }

        public override List<DocenteDetalles> GetDocentesbyApellido(string apepaterno)
        {
            string[] docentes, apellidos;
            docentes = Roles.GetUsersInRole("Docente");
            apellidos = docentes;
            List<DocenteDetalles> listdocente = new List<DocenteDetalles>();
            for (int i = 0; i < docentes.Length; i++)
            {
                ProfileCommon muprofile = (ProfileCommon)ProfileBase.Create(docentes[i], true);
                ProfileCommon targetProfile = muprofile.GetProfile(docentes[i]);
                apellidos[i] = string.Format("{0}", targetProfile.Personal.apmaterno);
            }
            for (int i = 0; i < docentes.Length; i++)
            {
                if (apellidos[i].StartsWith(apepaterno))
                    listdocente.Add(new DocenteDetalles(docentes[i], apellidos[i]));
            }
            return listdocente;
        }

        #endregion

        #region "Métodos para Notas"

        public override int InsertNota(NotaDetalles nota)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Nota_insertNota", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = nota.Id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = nota.Id_periodo;
                cmd.Parameters.Add("@alum_usua", SqlDbType.NVarChar).Value = nota.Alum_usua;
                cmd.Parameters.Add("@on_asis_nota", SqlDbType.TinyInt).Value = nota.On_asis_nota;
                cmd.Parameters.Add("@on_trab_nota", SqlDbType.TinyInt).Value = nota.On_trab_nota;
                cmd.Parameters.Add("@on_inte_nota", SqlDbType.TinyInt).Value = nota.On_inte_nota;
                cmd.Parameters.Add("@pra1_nota", SqlDbType.TinyInt).Value = nota.Pra1_nota;
                cmd.Parameters.Add("@pra2_nota", SqlDbType.TinyInt).Value = nota.Pra2_nota;
                cmd.Parameters.Add("@parc_nota", SqlDbType.TinyInt).Value = nota.Parc_nota;
                cmd.Parameters.Add("@fina_nota", SqlDbType.TinyInt).Value = nota.Fina_nota;
                cmd.Parameters.Add("@sust_nota", SqlDbType.TinyInt).Value = nota.Sust_nota;
                cmd.Parameters.Add("@prom_nota", SqlDbType.TinyInt).Value = nota.Prom_nota;
                cmd.Parameters.Add("@id_nota", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@id_nota"].Value;
            }
        }

        public override bool UpdateNota(NotaDetalles nota)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Nota_updateNota", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_nota", SqlDbType.Int).Value = nota.Id_nota;
                cmd.Parameters.Add("@on_asis_nota", SqlDbType.TinyInt).Value = nota.On_asis_nota;
                cmd.Parameters.Add("@on_trab_nota", SqlDbType.TinyInt).Value = nota.On_trab_nota;
                cmd.Parameters.Add("@on_inte_nota", SqlDbType.TinyInt).Value = nota.On_inte_nota;
                cmd.Parameters.Add("@pra1_nota", SqlDbType.TinyInt).Value = nota.Pra1_nota;
                cmd.Parameters.Add("@pra2_nota", SqlDbType.TinyInt).Value = nota.Pra2_nota;
                cmd.Parameters.Add("@parc_nota", SqlDbType.TinyInt).Value = nota.Parc_nota;
                cmd.Parameters.Add("@fina_nota", SqlDbType.TinyInt).Value = nota.Fina_nota;
                cmd.Parameters.Add("@sust_nota", SqlDbType.TinyInt).Value = nota.Sust_nota;
                cmd.Parameters.Add("@prom_nota", SqlDbType.TinyInt).Value = nota.Prom_nota;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override NotaDetalles GetNotasbyAlumno(int id_curso, int id_periodo, string id_alumno)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Nota_getNotabyAlumno", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@id_alumno", SqlDbType.NVarChar).Value = id_alumno;
                cn.Open();
                IDataReader reader = ExecuteReader(cmd, CommandBehavior.SingleRow);
                if (reader.Read())
                    return GetNotaFromReader(ExecuteReader(cmd));
                else
                    return null;
            }
        }

        #endregion

        #region "Métodos para Asistencias"

        public override int InsertAsistencia(AsistenciasDetalles asistencia)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Asistencia_insertAsistencia", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = asistencia.Id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = asistencia.Id_periodo;
                cmd.Parameters.Add("@alum_usua", SqlDbType.NVarChar).Value = asistencia.Alum_usua;
                cmd.Parameters.Add("@fech_asis", SqlDbType.NVarChar).Value = asistencia.Fech_asis;
                cmd.Parameters.Add("@esta_asis", SqlDbType.NVarChar).Value = asistencia.Esta_asis;
                cmd.Parameters.Add("@id_asistencia", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@id_asistencia"].Value;
            }
        }

        public override bool UpdateAsistencia(int id_asistencia,bool esta_asis)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Asistencia_updateAsistencia", cn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@id_asistencia", SqlDbType.Int).Value = id_asistencia; 
                cmd.Parameters.Add("@esta_asis", SqlDbType.NVarChar).Value = esta_asis;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (ret == 1);
            }
        }

        public override List<AsistenciasDetalles> GetAsistenciasbyAlumno(int id_curso, int id_periodo, string id_alumno, DateTime fecha_inicio, DateTime fecha_termino)
        {
            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("tbi_Asistencia_getAsistenciabyAlumno", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id_curso", SqlDbType.Int).Value = id_curso;
                cmd.Parameters.Add("@id_periodo", SqlDbType.Int).Value = id_periodo;
                cmd.Parameters.Add("@id_alumno", SqlDbType.NVarChar).Value = id_alumno;
                cmd.Parameters.Add("@fecha_inicio", SqlDbType.Date).Value = fecha_inicio;
                cmd.Parameters.Add("@fecha_termino", SqlDbType.Date).Value = fecha_termino;
                cn.Open();
                return GetAsistenciaCollectionFromReader(ExecuteReader(cmd));
            }
        }

        #endregion

        #region "Métodos para Alumnos"
        
        public override AlumnoDetalles GetAlumnos(int id_escuela, string id_alumno)
        {
            MembershipUser alumno = Membership.GetUser(id_alumno);
            ProfileCommon muprofile = (ProfileCommon)ProfileBase.Create(id_alumno, true);
            ProfileCommon targetProfile = muprofile.GetProfile(id_alumno);
            string nombre = string.Format("{0} {1} {2}", targetProfile.Personal.nombres,
                    targetProfile.Personal.appaterno, targetProfile.Personal.apmaterno);
            if (targetProfile.academico.codescuela.Equals(id_escuela))
                return new AlumnoDetalles(id_alumno, nombre);
            else
                return null;
        }

        public override List<AlumnoDetalles> GetAlumnosbyApellido(int id_escuela, string apepaterno)
        {
            string[] alumnos, apellidos, escuela, nombre;
            alumnos = Roles.GetUsersInRole("Alumno");
            nombre = escuela = apellidos = alumnos;
            List<AlumnoDetalles> listalumno = new List<AlumnoDetalles>();
            for (int i = 0; i < alumnos.Length; i++)
            {
                ProfileCommon muprofile = (ProfileCommon)ProfileBase.Create(alumnos[i], true);
                ProfileCommon targetProfile = muprofile.GetProfile(alumnos[i]);
                apellidos[i] = string.Format("{0}", targetProfile.Personal.apmaterno);
                escuela[i] = string.Format("{0}", targetProfile.academico.codescuela);
                nombre[i] = string.Format("{0} {1} {2}", targetProfile.Personal.nombres,
                    targetProfile.Personal.appaterno, targetProfile.Personal.apmaterno);
            }
            for (int i = 0; i < alumnos.Length; i++)
            {
                if (apellidos[i].StartsWith(apepaterno) && escuela[i].Equals(id_escuela))
                    listalumno.Add(new AlumnoDetalles(alumnos[i], nombre[i]));
            }
            return listalumno;
        }

        #endregion
    }
}